package cn.doit.dat06

object _09_视图限定 {
  def main(args: Array[String]): Unit = {
    class Bird(val name:String){
      def fly()={println(name + "飞走了")}
    }

    class ToyBird


    //视图限定
    def bitBird[T <% Bird](b:T)=b.fly()

    val smallBird: Bird = new Bird("小鸟")
    bitBird(smallBird)

    val toyBird: ToyBird = new ToyBird

    //视图限定限定的是，第一 本身这个类型是可以传的
    //第二，如果说有一个隐式方法，或者一个隐式类可以将一个类型转换成Bird类型
    implicit def toyBird2Bird(toyBird: String)={
      new Bird("玩具鸟")
    }

    bitBird("1")
//    bitBird(toyBird)



//    bitBird[Bird](new Bird("小鸟"))

//    implicit def toy2Bird(toyBird: ToyBird)= new Bird("玩具鸟")
//
//    bitBird[ToyBird](new ToyBird)
  }

}
